#pragma once
#include "../core/screen_st7789/screen.h"
#include "../core/wifi/wifi.h"
#include "../core/led_esp32_dev/led.h"
#include <WiFi.h>

#define PORT 8765
#define LED_PIN 2
/**
 * @class DisplayController
 * @brief 投屏模块控制类
 *
 * 封装了屏幕显示、WiFi 连接和 LED 控制的逻辑。
 * 使用此类可以统一管理投屏流程：
 * 1. 初始化 LED 灯、屏幕和 WiFi
 * 2. 处理客户端连接
 * 3. 接收并显示图像数据
 *
 * 示例：
 * ```cpp
 * DisplayController display;
 * display.setup();
 * 
 * void loop() {
 *     display.loop();
 * }
 * ```
 */
class DisplayController {
public:
    /**
     * @brief 构造函数
     *
     * 初始化内部成员对象：
     * - Screen 屏幕对象
     * - Led 灯对象
     * - WifiManager WiFi 管理对象
     * - WiFiServer 用于 TCP 投屏通信
     */
    DisplayController();

    /**
     * @brief 初始化投屏模块
     *
     * - 初始化 LED 引脚
     * - 初始化屏幕并显示启动信息
     * - 连接 WiFi
     * - 启动 TCP Server
     */
    void setup();

    /**
     * @brief 循环处理投屏数据
     *
     * - 检测客户端连接状态
     * - 接收来自客户端的图像数据
     * - 调用 Screen 对象显示数据
     */
    void loop();

private:
    Screen screen;           ///< 屏幕控制对象
    Led led;                 ///< LED 灯对象
    WifiManager wifi;        ///< WiFi 管理对象
    WiFiServer server;       ///< TCP 服务器
    WiFiClient client;       ///< 当前客户端
};